//
//  UIImage+Extensions.swift
//  WeiBo
//
//  Created by QingYin on 2017/4/28.
//  Copyright © 2017年 尹琼. All rights reserved.
//

import UIKit

public enum BtainImagesStyle : Int {
    
    case named // 默认的是根据图片名使用UIImage（named：） 函数 取得图片
    
    case file // 根据路径使用UIImage（contentsOfFile：） 函数取得图片，在图片只使用一次的情况下推荐使用这个函数
}

// MARK: - 指定渲染方式获得图片
extension UIImage {
    
    /// 根据旧的图片的渲染方式得到新图片
    ///
    /// - Parameters:
    ///   - image: 旧的图片
    ///   - renderingMode: 渲染方式
    /// - Returns: 新图片
    static private func newImage(image: UIImage?, renderingMode: Int) ->UIImage? {
        guard let renderingMode = UIImageRenderingMode(rawValue:renderingMode)
            else {
                return image
        }
        let newImage = image?.withRenderingMode(renderingMode)
        return newImage
    }
    
    /// 根据获取图片的方式和图片渲染方式得到新图片
    ///
    /// - Parameters:
    ///   - imageForStyle: 获取图片方式
    ///   - imageName: 可能是图片名可能是路径
    ///   - renderingMode: 渲染图片方式
    /// - Returns: 新图片
    static private func reImage(imageForStyle: Int,imageName:String,  renderingMode:Int) ->UIImage? {
        if imageName.characters.count > 0 {
            guard let imageForStyle = BtainImagesStyle(rawValue: imageForStyle) else {
                return UIImage(named: imageName)
            }
            if imageForStyle == BtainImagesStyle(rawValue: 0) {
                let image = UIImage(named: imageName)
                return newImage(image: image, renderingMode: renderingMode)
            } else {
                let image = UIImage(contentsOfFile: imageName)
                return newImage(image: image, renderingMode: renderingMode)
            }
        } else {
            return UIImage()
        }
    }
    
    /// 根据图片名获取图片然后指定渲染方式获取新图
    ///
    /// - Parameters:
    ///   - named: 图片名
    ///   - renderingMode: 渲染方式
    /// - Returns: 新图
    static func renderingModeImage(named: String, renderingMode:Int) ->UIImage? {
        return reImage(imageForStyle: 0, imageName: named, renderingMode: renderingMode)
    }
    
    ///根据图片路径获取图片然后指定渲染方式获取新图
    ///
    /// - Parameters:
    ///   - contentsOfFile: 图片路径
    ///   - renderingMode: 渲染方式
    /// - Returns: 新图
    static func renderingModeImage(contentsOfFile: String,renderingMode:Int) ->UIImage? {
        return reImage(imageForStyle: 1, imageName: contentsOfFile, renderingMode: renderingMode)
    }
}
